﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using Citrix.XenApp.Commands;

namespace Citrix.XaAdminMobile.Model
{
    /// <summary>
    /// The model interface for a XenApp server object.
    /// </summary>
    internal interface IServerModel : INotifyPropertyChanged
    {
        /// <summary>
        /// The date/time the Citrix server was installed.
        /// </summary>
        DateTime? CitrixInstallDate { get; }

        /// <summary>
        /// The install path of the Citrix server.
        /// </summary>
        string CitrixInstallPath { get; }

        /// <summary>
        /// The Citrix product edition.
        /// </summary>
        ProductEdition? CitrixProductEdition { get; }

        /// <summary>
        /// The product name of the Citrix (Metaframe/PS/XenApp) server.
        /// </summary>
        string CitrixProductName { get; }

        /// <summary>
        /// The service pack (if any) applied to the Citrix server.
        /// </summary>
        string CitrixServicePack { get; }

        /// <summary>
        /// The Citrix product version.
        /// </summary>
        Version CitrixVersion { get; }

        /// <summary>
        /// Whether or not the operating system is 64 bit.
        /// </summary>
        bool? Is64Bit { get; }

        /// <summary>
        /// The ICA (HDX) port number this server is listening on for incoming ICA connections.
        /// </summary>
        Int32? IcaPortNumber { get; }

        /// <summary>
        /// The IP addresses of the server. It includes IPV4 and IPV6 addresses.
        /// </summary>
        string[] IPAddresses { get; }

        /// <summary>
        /// Whether or not the print spooler is healthy on this server.
        /// </summary>
        bool? IsSpoolerHealthy { get; }

        /// <summary>
        /// The name of the Citrix license server that this server is using.
        /// </summary>
        string LicenseServerName { get; }

        /// <summary>
        /// The port of the Citrix license server that this server is using.
        /// </summary>
        Int32? LicenseServerPort { get; }

        /// <summary>
        /// The XenApp load index. Values are [0..10000] for normal load values, and 20000 in
        /// special cases to indicate the server is unavailable.
        /// </summary>
        uint Load { get; }

        /// <summary>
        /// Whether or not logons are enabled. Null when the value is not known.
        /// </summary>
        bool? LogonsEnabled { get; }

        /// <summary>
        /// The logon mode of the server.
        /// </summary>
        LogOnMode LogonMode { get; }

        /// <summary>
        /// The name of the server.
        /// </summary>
        string Name { get; }

        /// <summary>
        /// The service pack applied to the operating system.
        /// </summary>
        string OsServicePack { get; }

        /// <summary>
        /// The version of the operating system.
        /// </summary>
        Version OsVersion { get; }

        /// <summary>
        /// The power and capacity management mode.
        /// </summary>
        PcmMode PowerCapManagementMode { get; }

        /// <summary>
        /// The RDP port number this server is listening on for incoming RDP connections.
        /// </summary>
        Int32? RdpPortNumber { get; }

        /// <summary>
        /// The number of sessions currently running on the server, null when unknown.
        /// </summary>
        int? SessionCount { get; }

        /// <summary>
        /// The zone election preference of this server.
        /// </summary>
        ZoneElectionPreference ZoneElectionPreference { get; }

        /// <summary>
        /// The name of the zone this server belongs to.
        /// </summary>
        string ZoneName { get; }
    }
}
